SETVBUF

#include <stdio.h>
int setvbuf(stream, buf, type, size);
FILE *stream;      указатель на структуру FILE
char *buf;         буфер, назначенный пользователем.
int type           тип буфера:
                                   _IONBF - нет буфера;
                                   _IOFBF - полная буферизация;
                                   _IOLBF - строковая буферизация.
int size;          размер буфера.

Описание.
Функция setvbuf позволяет пользователю управлять буферизацией и размером буфера для потока stream . Stream может ссылаться на открытый файл. Массив, на который указывает buf , используется как буфер, если он не является NULL , т.е. поток не является буферизованным. Если поток буферизованный, используется тип, определенный по type ; этот тип может быть либо _IONBF , либо _IOFBF , либо _IOLBF . Если используется тип _IOFBF , размер буфера определяется по size ; если используется тип _IOLBF или _IONBF , поток является небуферизованным, а size и buf игнорируются.

            
            ЗНАЧЕНИЕ ТИПА              ЕГО СМЫСЛ
            
            _IONBF             Буфер не используется, несмотря  на
                               присутствие size и buf
            
            _IOFBF             Полная буферизация, если buf не яв-
                               ляется  NULL;  поэтому  buf исполь-
                               зуется в качестве буфера, а  size -
                               его размера
            
            _IOLBF             Аналогично _IOFBF

Истинное значение size обычно больше 0, но меньше максимального целого размера.

Возвращаемое значение.
Эта функция возвращает ненулевое значение, если тип или размер буфера неправильно определен, и возвращает значение 0, ес ли все определено верно.

Пример:

            #include <stdio.h>
            
            char buf[1024];
           
            FILE *stream1, *stream2;
         
            main()
            
            {
            stream1 = fopen("data1", "r");
            stream2 = fopen("data2", "w");
            
               /*  Stream1  будет использовать буфер размером 1024 байта и
         назначенный пользователем, а stream2 является небуферизованным */
            
            if (setvbuf(stream1, buf, _IOFBF, sizeof(buf)) !=0)
                  printf("Incorrect type or size of buffer1\n");
            if (setvbuf(stream2, _IONBF, 0) != 0)
                  printf("Incorrect type or size of buffer2\n");
            }
           
Hosted by uCoz